from typing import List
"""
    给定一个含有 n 个正整数的数组和一个正整数 target 。
    找出该数组中满足其总和大于等于 target 的长度最小的 
    子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，
    并返回其长度。如果不存在符合条件的子数组，返回 0 。
    
    
    示例 1：
    
        输入：target = 7, nums = [2,3,1,2,4,3]
        输出：2
        解释：子数组 [4,3] 是该条件下的长度最小的子数组。
    
    示例 2：
    
        输入：target = 4, nums = [1,4,4]
        输出：1
"""

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        ans = len(nums) + 1
        add = 0
        pre = 0
        for i in range(len(nums)):
            add += nums[i]
            while(add >= target):
                ans = min(ans,i - pre + 1)
                add -= nums[pre]
                pre += 1
        if ans == len(nums) + 1:
            return 0
        return ans